package com.feng.store.controller;

import com.feng.store.controller.ex.*;
import com.feng.store.service.ex.*;
import com.feng.store.util.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;

/**
 * 控制层类的基类
 */
public class BaseController {
    /** 操作成功的状态码 */
    public static final int OK=200;
    //请求处理方法，这个方法的返回值需要传递给前端的数据
    //自动将异常对象传递给此方法的参数列表上
    @ExceptionHandler({ServiceException.class,FileUploadException.class})//用于统一处理抛出的异常
    public JsonResult<Void> handleException(Throwable e){
        JsonResult<Void> result=new JsonResult<>(e);
        if(e instanceof UsernameDuplicatdException){
            result.setState(4000);
            result.setMessage("用户名已存在！");
        }
        else if(e instanceof AddressCountLimitException){
            result.setState(4001);
            result.setMessage("用户的收获地址超出上限！");
        }
        else if(e instanceof InsertException){
            result.setState(5000);
            result.setMessage("网络出现了一点点小波动~");
        }
        else if(e instanceof UserNotFoundExcption){
            result.setState(5001);
            result.setMessage("用户不存在！");
        }
        else if(e instanceof PasswordNotMatchException){
            result.setState(5002);
            result.setMessage("用户名密码错误！");
        }
        else if(e instanceof UpdateException){
            result.setState(5003);
            result.setMessage("更新数据时产生了未知错误！");
        }
        else if (e instanceof FileEmptyException) {
            result.setState(6000);
        } else if (e instanceof FileSizeException) {
            result.setState(6001);
        } else if (e instanceof FileTypeException) {
            result.setState(6002);
        } else if (e instanceof FileStateException) {
            result.setState(6003);
        } else if (e instanceof FileUploadIOException) {
            result.setState(6004);
        }

        return  result;

    }

    /**
     * 获取session对象中的uid
     * @param session
     * @return 当前登录用户uid的值
     */
    protected final Integer getuidFromSession(HttpSession session){
        return Integer.valueOf(session.getAttribute("uid").toString());
    }

    /**
     * 获取当前登录的用户名
     * @param session 对象
     * @return 返回当前登录的用户名称
     */
    protected final String getUsernameFromSession(HttpSession session){
       return session.getAttribute("username").toString();
    }
}
